W - WohngebietM2 - MischgebietDie Daten stammen aus dem FIS-Broker der Senatsverwaltung für Stadtentwicklung und Wohnen.
Zur Arbeit mit dem FIS-Broker siehe auch den Vortrag “Daten aus dem FIS-Broker” von Jochen Klar zum ODD 2017 in Berlin.
library("gdalUtils")
library("ggplot2")
suppressPackageStartupMessages(library("dplyr"))
library("leaflet")
suppressPackageStartupMessages(library("viridis"))
library("tibble")
library("scales")##
## Attaching package: 'scales'
## The following object is masked from 'package:viridis':
##
## viridis_pal
library("sf")## Linking to GEOS 3.6.1, GDAL 2.2.0, proj.4 4.9.3
library("ggjoy")
knitr::opts_chunk$set(echo = TRUE)
options(width = 140, stringsAsFactors = FALSE)get_xml <- function(years) {
p <- progress_estimated(length(years))
purrr::map(years, function(year) {
base_url <- sprintf("http://fbinter.stadt-berlin.de/fb/wfs/geometry/senstadt/re_brw%s", year)
url <- paste0(base_url, "?REQUEST=GetFeature&SERVICE=WFS&VERSION=2.0.0&TYPENAMES=GML2")
fname <- sprintf("./data/brw%s.xml", year)
result <- httr::GET(url, httr::write_disk(path = fname, overwrite = TRUE))
#if (result$status_code > 201) {
# stop(result$status_code, ": downloading file; file may not exist", call. = FALSE)
#}
dest_file <- sprintf("./data/brw%s.shp", year)
ogr2ogr(src_datasource_name = fname,
dst_datasource_name = dest_file,
f = "ESRI Shapefile",
s_srs = "EPSG:25833",
t_srs = "WGS84",
overwrite = TRUE)
Sys.sleep(.5)
p$tick()$print()
})
}
read_brw <- function() {
files <- dir("./data/", pattern = ".shp", full.names = TRUE)
purrr::map(files, function(file) {
# see https://github.com/edzer/sfr/issues/5
st_read(file,
quiet = TRUE,
stringsAsFactors = FALSE,
#options = "ENCODING=UTF-8"
) %>%
select(spatial_al, spatial_ty, BEZIRK, BRW,
NUTZUNG, STICHTAG, GFZ, BEITRAGSZU, geometry) %>%
mutate(BRW = as.integer(BRW),
year = as.numeric(format(as.Date(STICHTAG), "%Y")))
}) -> out
}microbenchmark::microbenchmark(get_xml(2002:2017), times = 1L)dat <- read_brw()
# dat %>%
# bind_rows()
# Error in .subset2(x, i, exact = exact) :
# attempt to select less than one element in get1index
dat <- do.call("rbind", dat)
class(dat)## [1] "sf" "data.frame"
glimpse(dat, width = 110)## Observations: 17,360
## Variables: 10
## $ spatial_al <dbl> 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 10...
## $ spatial_ty <chr> "Polygon", "Polygon", "Polygon", "Polygon", "Polygon", "Polygon", "Polygon", "Polygon"...
## $ BEZIRK <chr> "Marzahn-Hellersdorf", "Treptow-Köpenick", "Spandau", "Marzahn-Hellersdorf", "Mitte", ...
## $ BRW <int> 160, 180, 220, 85, 1700, 490, 55, 460, 2000, 640, 160, 160, 1000, 70, 220, 690, 70, 85...
## $ NUTZUNG <chr> "G - Gewerbe", "W - Wohngebiet", "W - Wohngebiet", "Gp - Gewerbe produzierend", "M1 - ...
## $ STICHTAG <chr> "2002-01-01T00:00:00", "2002-01-01T00:00:00", "2002-01-01T00:00:00", "2002-01-01T00:00...
## $ GFZ <dbl> NA, 0.7, 0.7, NA, 4.5, 0.6, NA, 1.5, 4.5, 2.5, 0.4, NA, 2.5, NA, 0.8, 2.5, NA, NA, 0.4...
## $ BEITRAGSZU <chr> "Beitragsfrei nach BauGB", "Beitragsfrei nach BauGB", "Beitragsfrei nach BauGB", "Beit...
## $ year <dbl> 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 20...
## $ geometry <simple_feature> MULTIPOLYGON(((13.558663970..., MULTIPOLYGON(((13.531149513..., MULTIPOLYGO...
wl_gr <- c("M", "E", "G", "E/M", "M/E", "G/M", "G/E", "M/G", "E/G")
match_WL <- function(x, y) {
z <- sum(match(c(x,y), wl_gr), na.rm = TRUE)
z <- ifelse(z == 0, NA, z)
z }
wl <- readr::read_tsv("tabula-brw-liste-geschlossene-bauweise-2017.tsv",
col_names = FALSE, skip= 1) %>%
select(X1, X6, X7) %>%
filter(!is.na(X1), X1 != "GFZ") %>%
purrr::set_names(c("spatial_al", "WL_A", "WL_B")) %>%
mutate(spatial_al = as.numeric(spatial_al)) %>%
rowwise() %>%
mutate(Wohnlage = match_WL(WL_A, WL_B),
Wohnlage = wl_gr[Wohnlage]) %>%
select(spatial_al, Wohnlage) %>%
arrange(spatial_al)## Parsed with column specification:
## cols(
## X1 = col_character(),
## X2 = col_character(),
## X3 = col_character(),
## X4 = col_character(),
## X5 = col_character(),
## X6 = col_character(),
## X7 = col_character(),
## X8 = col_character(),
## X9 = col_character(),
## X10 = col_character(),
## X11 = col_character(),
## X12 = col_character(),
## X13 = col_character(),
## X14 = col_character()
## )
## Warning: 243 parsing failures.
## row col expected actual file
## 15 -- 14 columns 13 columns 'tabula-brw-liste-geschlossene-bauweise-2017.tsv'
## 16 -- 14 columns 13 columns 'tabula-brw-liste-geschlossene-bauweise-2017.tsv'
## 17 -- 14 columns 13 columns 'tabula-brw-liste-geschlossene-bauweise-2017.tsv'
## 18 -- 14 columns 13 columns 'tabula-brw-liste-geschlossene-bauweise-2017.tsv'
## 19 -- 14 columns 13 columns 'tabula-brw-liste-geschlossene-bauweise-2017.tsv'
## ... ... .......... .......... .................................................
## See problems(...) for more details.
dat <- left_join(dat, wl, by="spatial_al")table(dat$GFZ, dat$Wohnlage) %>% knitr::kable()| E | E/G | E/M | G | G/E | G/M | M | M/E | M/G | |
|---|---|---|---|---|---|---|---|---|---|
| 0.1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0.7 | 23 | 0 | 0 | 0 | 0 | 0 | 89 | 0 | 0 |
| 0.8 | 72 | 16 | 26 | 86 | 0 | 16 | 131 | 15 | 0 |
| 0.9 | 16 | 0 | 9 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 272 | 0 | 96 | 191 | 16 | 59 | 490 | 117 | 0 |
| 1.2 | 32 | 0 | 7 | 63 | 0 | 16 | 146 | 58 | 0 |
| 1.3 | 16 | 0 | 7 | 16 | 0 | 0 | 55 | 0 | 0 |
| 1.5 | 46 | 0 | 64 | 16 | 0 | 0 | 192 | 72 | 16 |
| 1.6 | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 0 | 0 |
| 1.7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1.8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 175 | 0 | 48 | 48 | 0 | 33 | 136 | 22 | 11 |
| 2.4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2.5 | 208 | 0 | 47 | 16 | 0 | 0 | 42 | 25 | 15 |
| 2.7 | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 16 | 0 | 0 | 0 | 0 | 0 | 16 | 0 | 0 |
| 3.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4.5 | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 0 | 0 |
saveRDS(dat, file = "brw_data.rds") table(dat$BEZIRK, dat$year) %>% knitr::kable()| 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Charlottenburg-Wilmersdorf | 70 | 70 | 70 | 74 | 70 | 78 | 76 | 77 | 76 | 77 | 78 | 80 | 79 | 79 | 80 | 80 |
| Friedrichshain-Kreuzberg | 44 | 43 | 42 | 44 | 37 | 37 | 38 | 41 | 44 | 40 | 39 | 37 | 36 | 36 | 33 | 34 |
| Lichtenberg | 75 | 74 | 72 | 73 | 70 | 71 | 71 | 71 | 72 | 73 | 75 | 82 | 83 | 83 | 82 | 81 |
| Marzahn-Hellersdorf | 46 | 49 | 49 | 48 | 48 | 52 | 55 | 56 | 55 | 56 | 58 | 57 | 57 | 58 | 57 | 57 |
| Mitte | 92 | 92 | 93 | 91 | 80 | 84 | 89 | 89 | 95 | 91 | 92 | 93 | 96 | 92 | 92 | 95 |
| Neukölln | 59 | 59 | 59 | 61 | 60 | 60 | 60 | 63 | 62 | 62 | 63 | 64 | 64 | 64 | 64 | 64 |
| Pankow | 122 | 122 | 121 | 122 | 121 | 112 | 118 | 126 | 129 | 126 | 123 | 131 | 135 | 131 | 128 | 127 |
| Reinickendorf | 95 | 95 | 93 | 92 | 92 | 97 | 96 | 98 | 97 | 100 | 99 | 108 | 106 | 104 | 103 | 104 |
| Spandau | 122 | 122 | 125 | 124 | 122 | 125 | 129 | 131 | 130 | 137 | 139 | 147 | 148 | 149 | 149 | 147 |
| Steglitz-Zehlendorf | 112 | 112 | 114 | 114 | 106 | 113 | 114 | 116 | 115 | 122 | 121 | 125 | 126 | 125 | 125 | 127 |
| Tempelhof-Schöneberg | 69 | 69 | 68 | 68 | 61 | 69 | 69 | 72 | 71 | 70 | 70 | 73 | 74 | 72 | 73 | 74 |
| Treptow-Köpenick | 128 | 129 | 128 | 127 | 131 | 131 | 135 | 131 | 141 | 141 | 142 | 158 | 161 | 154 | 152 | 154 |
table(dat$NUTZUNG, dat$year) %>% knitr::kable()| 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F - Forstflächen | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 35 | 35 | 35 | 35 | 35 |
| G - Gewerbe | 234 | 234 | 234 | 228 | 234 | 242 | 243 | 253 | 244 | 238 | 238 | 236 | 235 | 227 | 224 | 223 |
| GB - Gemeinbedarf | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 34 | 35 | 37 | 38 | 39 | 39 | 39 |
| Gp - Gewerbe produzierend | 18 | 18 | 17 | 18 | 15 | 10 | 9 | 0 | 10 | 7 | 6 | 4 | 4 | 4 | 4 | 4 |
| LW-A - Acker | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 10 | 11 | 11 | 11 |
| LW-EGA - Erwerbsgartenbau | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 3 | 3 | 3 |
| LW-G - Grünland | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 0 |
| LW-GR - Grünland | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 6 | 6 | 6 |
| M1 - Kerngebiet | 54 | 54 | 54 | 52 | 35 | 49 | 52 | 52 | 57 | 54 | 54 | 56 | 59 | 55 | 53 | 53 |
| M1* - Einzelhandelszentrum | 0 | 0 | 0 | 0 | 12 | 14 | 15 | 15 | 15 | 16 | 16 | 15 | 15 | 15 | 8 | 8 |
| M2 - Mischgebiet | 48 | 49 | 50 | 48 | 19 | 43 | 43 | 43 | 46 | 44 | 45 | 43 | 41 | 39 | 37 | 39 |
| W - Wohngebiet | 680 | 681 | 679 | 692 | 683 | 671 | 688 | 708 | 715 | 702 | 705 | 709 | 718 | 713 | 718 | 723 |
z <- tbl_df(dat) %>%
group_by(BEZIRK, NUTZUNG, GFZ, year) %>%
summarise(count = n(),
q25 = quantile(BRW, 0.25, na.rm = TRUE),
q75 = quantile(BRW, 0.75, na.rm = TRUE),
q95 = quantile(BRW, 0.95, na.rm = TRUE),
iqr = IQR(BRW, na.rm = TRUE),
mean = mean(BRW, na.rm = TRUE),
med = median(BRW, na.rm = TRUE)) %>%
filter(!is.na(BEZIRK)) %>%
ungroup()
tail(z, 10) %>% knitr::kable()| BEZIRK | NUTZUNG | GFZ | year | count | q25 | q75 | q95 | iqr | mean | med |
|---|---|---|---|---|---|---|---|---|---|---|
| Treptow-Köpenick | W - Wohngebiet | 2 | 2008 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2009 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2010 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2011 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2012 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2013 | 2 | 230 | 230 | 230 | 0 | 230 | 230 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2014 | 2 | 250 | 250 | 250 | 0 | 250 | 250 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2015 | 2 | 400 | 400 | 400 | 0 | 400 | 400 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2016 | 2 | 600 | 600 | 600 | 0 | 600 | 600 |
| Treptow-Köpenick | W - Wohngebiet | 2 | 2017 | 2 | 1200 | 1200 | 1200 | 0 | 1200 | 1200 |
W - Wohngebietp0 <- ggplot(filter(z, year >= 2008, NUTZUNG == "W - Wohngebiet"),
aes(factor(year), mean, colour = "BEZIRK", group = "BEZIRK"))
p0 <- p0 + geom_line()
p0 <- p0 + facet_grid(factor(GFZ) ~ BEZIRK, scales = "free")
p0 <- p0 + theme(axis.text.x = element_text(angle=90, vjust=0.5, size = 8),
axis.text.y = element_text(size = 8),
legend.position="none")
p0 <- p0 + labs(x = "",
y = "Durchschnitt in €",
title = "Bodenrichtwerte in der Nutzung 'W - Wohngebiet' (2008-2017)",
subtitle = "",
caption = "Quelle: FIS-Broker / Gutachterausschuss für Grundstückswerte in Berlin")
p0M2 - Mischgebietp1 <- ggplot(filter(z, year >= 2008, NUTZUNG == "M2 - Mischgebiet"),
aes(factor(year), mean, colour = "BEZIRK", group = "BEZIRK"))
p1 <- p1 + geom_line()
p1 <- p1 + facet_grid(factor(GFZ) ~ BEZIRK, scales = "free")
p1 <- p1 + theme(axis.text.x = element_text(angle=90, vjust=0.5, size = 8),
axis.text.y = element_text(size = 8),
legend.position="none")
p1 <- p1 + labs(x = "",
y = "Durchschnitt in €",
title = "Bodenrichtwerte in der Nutzung 'M2 - Mischgebiet' (2008-2017)",
subtitle = "",
caption = "Quelle: FIS-Broker / Gutachterausschuss für Grundstückswerte in Berlin")
p1brw <- st_read("./data/brw2017.shp",
quiet = TRUE,
stringsAsFactors = FALSE,
#options = "ENCODING=UTF-8"
) %>%
filter(BRW <= 8000)
pal <- colorNumeric(
palette = viridis_pal()(10),
domain = brw$BRW
)
popup <- paste0("<b>", brw$spatial_al, " - ",
brw$NUTZUNG , " - ",
brw$GFZ, " - ",
brw$BRW, " Euro/qm")
leafMap <- leaflet(height = "800px", width = "1000px") %>%
setView(lng = 13.383, lat = 52.516, zoom = 11) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(data = brw,
stroke = TRUE,
dashArray = 1,
weight = 1.5,
color = "white",
smoothFactor = 0.20,
fillOpacity = 0.60,
fillColor = ~pal(brw$BRW),
highlightOptions = highlightOptions(color = "steelblue",
weight = 4,
bringToFront = FALSE),
popup = popup,
group = "Bodenrichtwerte") %>%
addLegend("bottomright",
pal = pal,
values = brw$BRW,
title = "Euro/qm",
labFormat = labelFormat(suffix = " "),
opacity = 1)
leafMapVorlage der Grafik ist Mapping San Francisco home prices using R
WIP!
p1 <- filter(dat,
NUTZUNG == "W - Wohngebiet",
GFZ %in% c(0.4, 1, 1.2, 2.5) )
p1 <- p1[which(p1$BRW < mean(p1$BRW) + (2.5 * sd(p1$BRW))), ]
brw_violin <- ggplot(p1, aes(x=factor(year), y=BRW, fill=factor(year))) +
geom_violin(color = "grey50") +
stat_summary(fun.y=mean, geom="point", size=2, colour="white") +
stat_summary(fun.y=median, geom="point", size=2, colour="red") +
facet_wrap( ~ GFZ, ncol = 2, scales = "free") +
theme(legend.position="none") +
scale_y_continuous(labels = comma) +
labs(x="",
y="Bodenrichtwert(€)",
title="Verteilung der Bodenrichtwerte (W-Wohngebiet) nach ausgewählter GFZ",
subtitle="Nominal prices (2002 - 2017); BRW means visualized as points, median in red",
caption="Quelle: FIS-Broker / Gutachterausschuss für Grundstückswerte in Berlin")
brw_violinbrw_joyplot <- ggplot(p1, aes(x = BRW, y = factor(year))) +
geom_joy(scale = 3, rel_min_height = 0.01) +
theme_joy(font_size = 11, grid = TRUE) +
labs(x="Bodenrichtwert (€)",
y="year",
title="Verteilung der Bodenrichtwerte (W-Wohngebiet) nach ausgewählter GFZ",
subtitle="Nominal prices (2002 - 2017)",
caption="Quelle: FIS-Broker / Gutachterausschuss für Grundstückswerte in Berlin")
brw_joyplot## Picking joint bandwidth of 34.3
devtools::session_info()## Session info ------------------------------------------------------------------------------------------------------------------------------
## setting value
## version R version 3.4.0 (2017-04-21)
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate German_Germany.1252
## tz Europe/Berlin
## date 2017-07-15
## Packages ----------------------------------------------------------------------------------------------------------------------------------
## package * version date source
## assertthat 0.2.0 2017-04-11 CRAN (R 3.4.0)
## backports 1.1.0 2017-05-22 CRAN (R 3.4.0)
## base * 3.4.0 2017-04-21 local
## bindr 0.1 2016-11-13 CRAN (R 3.4.0)
## bindrcpp * 0.2 2017-06-17 CRAN (R 3.4.0)
## codetools 0.2-15 2016-10-05 CRAN (R 3.4.0)
## colorspace 1.3-2 2016-12-14 CRAN (R 3.4.0)
## compiler 3.4.0 2017-04-21 local
## crosstalk 1.0.0 2016-12-21 CRAN (R 3.4.0)
## datasets * 3.4.0 2017-04-21 local
## DBI 0.7 2017-06-18 CRAN (R 3.4.0)
## devtools 1.13.2 2017-06-02 CRAN (R 3.4.0)
## digest 0.6.12 2017-01-27 CRAN (R 3.4.0)
## dplyr * 0.7.1 2017-06-22 CRAN (R 3.4.0)
## evaluate 0.10.1 2017-06-24 CRAN (R 3.4.0)
## foreach 1.4.3 2015-10-13 CRAN (R 3.4.0)
## gdalUtils * 2.0.1.7 2015-10-10 CRAN (R 3.4.0)
## ggjoy * 0.1.0.9990 2017-07-15 Github (clauswilke/ggjoy@146f727)
## ggplot2 * 2.2.1.9000 2017-07-15 Github (tidyverse/ggplot2@45853c7)
## glue 1.1.1 2017-06-21 CRAN (R 3.4.0)
## graphics * 3.4.0 2017-04-21 local
## grDevices * 3.4.0 2017-04-21 local
## grid 3.4.0 2017-04-21 local
## gridExtra 2.2.1 2016-02-29 CRAN (R 3.4.0)
## gtable 0.2.0 2016-02-26 CRAN (R 3.4.0)
## highr 0.6 2016-05-09 CRAN (R 3.4.0)
## hms 0.3 2016-11-22 CRAN (R 3.4.0)
## htmltools 0.3.6 2017-04-28 CRAN (R 3.4.0)
## htmlwidgets 0.9 2017-07-12 Github (ramnathv/htmlwidgets@6f4101d)
## httpuv 1.3.5 2017-07-04 CRAN (R 3.4.1)
## iterators 1.0.8 2015-10-13 CRAN (R 3.4.0)
## jsonlite 1.5 2017-06-01 CRAN (R 3.4.0)
## knitr 1.16 2017-05-18 CRAN (R 3.4.0)
## labeling 0.3 2014-08-23 CRAN (R 3.4.0)
## lattice 0.20-35 2017-03-25 CRAN (R 3.4.0)
## lazyeval 0.2.0 2016-06-12 CRAN (R 3.4.0)
## leaflet * 1.1.0.9000 2017-05-05 Github (rstudio/leaflet@f15492c)
## magrittr 1.5 2014-11-22 CRAN (R 3.4.0)
## memoise 1.1.0 2017-04-21 CRAN (R 3.4.0)
## methods * 3.4.0 2017-04-21 local
## mime 0.5 2016-07-07 CRAN (R 3.4.0)
## munsell 0.4.3 2016-02-13 CRAN (R 3.4.0)
## pkgconfig 2.0.1 2017-03-21 CRAN (R 3.4.0)
## plyr 1.8.4 2016-06-08 CRAN (R 3.4.0)
## purrr 0.2.2.2 2017-05-11 CRAN (R 3.4.0)
## R.methodsS3 1.7.1 2016-02-16 CRAN (R 3.4.0)
## R.oo 1.21.0 2016-11-01 CRAN (R 3.4.0)
## R.utils 2.5.0 2016-11-07 CRAN (R 3.4.0)
## R6 2.2.2 2017-06-17 CRAN (R 3.4.0)
## raster 2.5-8 2016-06-02 CRAN (R 3.4.0)
## Rcpp 0.12.11 2017-05-22 CRAN (R 3.4.0)
## readr 1.1.1.9000 2017-06-15 Github (hadley/readr@3ea8199)
## reshape2 1.4.2 2016-10-22 CRAN (R 3.4.0)
## rgdal 1.2-8 2017-07-01 CRAN (R 3.4.1)
## rlang 0.1.1 2017-05-18 CRAN (R 3.4.0)
## rmarkdown 1.6.0.9001 2017-07-03 Github (rstudio/rmarkdown@8cfe0cb)
## rprojroot 1.2 2017-01-16 CRAN (R 3.4.0)
## scales * 0.4.1.9002 2017-07-09 Github (hadley/scales@6db7b6f)
## sf * 0.5-3 2017-07-14 local
## shiny 1.0.3 2017-04-26 CRAN (R 3.4.0)
## sp 1.2-5 2017-06-29 CRAN (R 3.4.1)
## stats * 3.4.0 2017-04-21 local
## stringi 1.1.5 2017-04-07 CRAN (R 3.4.0)
## stringr 1.2.0 2017-02-18 CRAN (R 3.4.0)
## tibble * 1.3.3 2017-05-28 CRAN (R 3.4.0)
## tools 3.4.0 2017-04-21 local
## udunits2 0.13 2016-11-17 CRAN (R 3.4.0)
## units 0.4-5 2017-06-15 CRAN (R 3.4.0)
## utils * 3.4.0 2017-04-21 local
## viridis * 0.4.0 2017-04-23 Github (sjmgarnier/viridis@cb9a6b9)
## viridisLite * 0.2.0 2017-04-23 Github (sjmgarnier/viridisLite@911015c)
## withr 1.0.2 2016-06-20 CRAN (R 3.4.0)
## xtable 1.8-2 2016-02-05 CRAN (R 3.4.0)
## yaml 2.1.14 2016-11-12 CRAN (R 3.4.0)